Conditional Requests হল HTTP প্রোটোকলে এমন অনুরোধ, যা শুধুমাত্র নির্দিষ্ট শর্ত পূরণ হলে সার্ভার থেকে রেসপন্স প্রাপ্ত হয়। এটি সাধারণত ব্রাউজার বা ক্লায়েন্টের জন্য উপকারী, কারণ এটি শুধুমাত্র সেই তথ্য পুনরায় পেতে সাহায্য করে যা পরিবর্তিত হয়েছে, বা যা আগে সংগ্রহ করা হয়নি। এটি নেটওয়ার্ক ট্রাফিক এবং সার্ভারের লোড কমাতে সহায়ক।
এগুলির মধ্যে প্রধান শর্তাবলী হল If-Modified-Since এবং ETag। এগুলি সার্ভারের কাছে একটি অনুরোধ পাঠানোর সময় কন্ডিশনাল চেক করতে ব্যবহৃত হয়। যদি শর্তটি পূর্ণ হয়, তবে সার্ভার রেসপন্স ফেরত দেয়; যদি না হয়, তবে ক্লায়েন্টকে পুরোনো বা অপরিবর্তিত তথ্য পাঠানো হয়।
Apache HTTP Client-এ If-Modified-Since এবং ETag হ্যান্ডেল করার জন্য, আমরা সাধারণত HttpGet
বা HttpRequestBase
ব্যবহার করি এবং কাস্টম হেডার যোগ করি। নিচে উদাহরণ দেওয়া হল কিভাবে এই কন্ডিশনাল রিকোয়েস্টগুলি ব্যবহৃত হতে পারে।
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.impl.client.HttpClientContext;
import org.apache.http.client.methods.HttpUriRequestBase;
import org.apache.http.util.EntityUtils;
import org.apache.http.HttpEntity;
import java.util.Date;
public class ConditionalRequestExample {
public static void main(String[] args) {
try {
// HttpClient তৈরি করা
CloseableHttpClient httpClient = HttpClients.createDefault();
// GET অনুরোধ তৈরি করা
HttpGet httpGet = new HttpGet("https://example.com/resource");
// If-Modified-Since হেডার যোগ করা
Date lastModified = new Date(System.currentTimeMillis() - 24 * 60 * 60 * 1000); // 24 ঘণ্টা আগে
httpGet.setHeader("If-Modified-Since", lastModified.toString());
// ETag হেডার যোগ করা
String etag = "\"5d8c72a5-c81\""; // আগের রিসোর্স থেকে প্রাপ্ত ETag
httpGet.setHeader("If-None-Match", etag);
// HTTP অনুরোধ পাঠানো
HttpResponse response = httpClient.execute(httpGet);
// রেসপন্স কোড চেক করা
int statusCode = response.getStatusLine().getStatusCode();
System.out.println("Response Status Code: " + statusCode);
// যদি রেসপন্স 200 হয়, তাহলে কন্টেন্ট প্রদর্শন করা
if (statusCode == 200) {
HttpEntity entity = response.getEntity();
String content = EntityUtils.toString(entity);
System.out.println("Response Content: " + content);
}
// যদি 304 হয় (Not Modified), তাহলে জানানো হবে
else if (statusCode == 304) {
System.out.println("Resource not modified, using cached content.");
}
// HttpClient বন্ধ করা
httpClient.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
httpGet.setHeader("If-Modified-Since", lastModified.toString());
lastModified
একটি Date
অবজেক্ট যা গত 24 ঘণ্টার আগে সেট করা হয়েছে। এটি সার্ভারকে বলে যে, কেবলমাত্র যদি রিসোর্সটি গত 24 ঘণ্টায় পরিবর্তিত হয়ে থাকে, তবেই নতুন কন্টেন্ট পাঠানো হবে।httpGet.setHeader("If-None-Match", etag);
etag
একটি স্ট্রিং যা সার্ভার থেকে প্রাপ্ত আগের ETag সনাক্তকারী ধারণ করে। এটি নিশ্চিত করে যে, কেবলমাত্র যদি রিসোর্সের সংস্করণ পরিবর্তিত হয়, তবেই সার্ভার থেকে নতুন কন্টেন্ট ফেরত আসবে।if (statusCode == 200)
চেক করে যদি রেসপন্স কোড 200 হয়, তবে নতুন কন্টেন্ট প্রদর্শিত হয়।else if (statusCode == 304)
চেক করে যদি রেসপন্স কোড 304 (Not Modified) হয়, তবে সার্ভার জানাচ্ছে যে রিসোর্স পরিবর্তিত হয়নি এবং ক্লায়েন্টকে পুরানো কন্টেন্ট ব্যবহার করার জন্য বলা হচ্ছে।Conditional Requests হল HTTP অনুরোধের একটি অত্যন্ত কার্যকরী কৌশল, যা রিসোর্সের পরিবর্তন সনাক্ত করে ক্লায়েন্টকে পুরানো বা অপরিবর্তিত কন্টেন্ট ফেরত পাঠাতে সহায়ক। Apache HTTP Client ব্যবহার করে If-Modified-Since এবং ETag হেডার সেট করা যায়, যা সার্ভার থেকে শুধুমাত্র পরিবর্তিত কন্টেন্ট প্রাপ্তি নিশ্চিত করে এবং নেটওয়ার্কের কার্যকারিতা বৃদ্ধি করে।